package bszt.kedaxunfei;

import java.util.Scanner;
import java.util.Stack;

public class Code02 {

    /**
     * 问题描述
     * 在一个神秘的魔法世界中，K小姐正在进行一项有趣的实验。她有一个空的魔法栈，每次她施法都会向栈中加入一个数字
     * 每当栈顶有两个相同的数字时，它们会合并成一个更高的数字，具体规则是：两个连续的相同数字x会合并为x+1。K小姐想知道经过m次施法后，栈中剩下的数字是什么
     * <p></p>
     * 输入格式
     * 第一行包含一个整数m，表示施法的次数
     * 第二行包含m个正整数，表示每次施法时加入的数字
     * <p></p>
     * 输出格式
     * 输出一行数字，表示施法结束后栈中剩下的数字（自栈底至栈顶）。
     */

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            int t = sc.nextInt();
            if (stack.isEmpty() || stack.peek() != t) {
                stack.push(t);
            } else {
                stack.pop();
                stack.push(t + 1);
            }
        }
        for (Integer num : stack) {
            System.out.print(num + " ");
        }
    }
}
